package com.rzjm.exercise.common.utils;

import lombok.extern.slf4j.Slf4j;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
 
/** 
* 拼音工具 
*/ 
@Slf4j
public class PinyinToolkit { 
 
        /** 
         * 获取汉字串拼音首字母，英文字符不变 
         * 
         * @param chinese 汉字串 
         * @return 汉语拼音首字母 
         */ 
        public static String cn2FirstSpell(String chinese) { 
            StringBuffer pybf = new StringBuffer(); 
            char[] arr = chinese.toCharArray(); 
            HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); 
            defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); 
            defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 
            for (int i = 0; i < arr.length; i++) { 
                if (arr[i] > 128) { 
                        try { 
                            String[] _t = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat); 
                            if (_t != null) { 
                                pybf.append(_t[0].charAt(0)); 
                            } 
                        } catch (BadHanyuPinyinOutputFormatCombination e) { 
                            log.error(e.toString());
                        } 
                } else { 
                    pybf.append(arr[i]); 
                } 
            } 
            return pybf.toString().replaceAll("\\W", "").trim(); 
        } 
        
        /** 
         * 获取汉字串第一个汉字拼音首字母，英文字符不变 
         * 
         * @param chinese 汉字串 
         * @return 汉语拼音首字母 
         */ 
        public static String cn2FirstSpellOnce(String chinese) { 
        	StringBuffer pybf = new StringBuffer(); 
        	char[] arr = chinese.toCharArray(); 
        	HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); 
        	defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); 
        	defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 
        	for (int i = 0; i < arr.length; i++) { 
        		if (arr[i] > 128) { 
        			try { 
        				String[] _t = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat); 
        				if (_t != null) { 
        					pybf.append(_t[0].charAt(0)); 
        					
        					return pybf.toString().replaceAll("\\W", "").trim();
        				} 
        			} catch (BadHanyuPinyinOutputFormatCombination e) { 
        				log.error(e.toString());
        			} 
        		} else { 
        			pybf.append(arr[i]); 
        		} 
        	} 
        	return null; 
        } 
 
        /** 
         * 获取汉字串拼音，英文字符不变 
         * 
         * @param chinese 汉字串 
         * @return 汉语拼音 
         */ 
        public static String cn2Spell(String chinese) { 
            StringBuffer pybf = new StringBuffer(); 
            char[] arr = chinese.toCharArray(); 
            HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); 
            defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); 
            defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 
            for (int i = 0; i < arr.length; i++) { 
                if (arr[i] > 128) { 
                    try { 
                        pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]); 
                    } catch (BadHanyuPinyinOutputFormatCombination e) { 
                        log.error(e.toString());
                    } 
                } else { 
                    pybf.append(arr[i]); 
                } 
            }
            return pybf.toString();
        } 
}
